PASM (Parrot Assembly Language) হলো প্যারট ভার্চুয়াল মেশিনের জন্য একটি অ্যাসেম্বলি ভাষা। এটি প্যারট ভিএমের ইনস্ট্রাকশন সেট এবং অ্যান্ড-অর্ডার অপারেশনগুলির সরাসরি ব্যবহারের জন্য তৈরি করা হয়েছে। PASM ভাষাটি প্যারটের বিভিন্ন ভাষার জন্য নিচু-স্তরের অপারেশন সরবরাহ করে, যা একাধিক ভাষার জন্য কার্যকরী কোড তৈরি করতে সহায়তা করে। এতে Instructions, Registers, এবং Constants ব্যবহৃত হয়।
PASM এ Instructions (ইনস্ট্রাকশন)
ইনস্ট্রাকশন গুলি PASM এ বিভিন্ন কমান্ড বা অপারেশন নির্দেশ করে যা প্যারট ভার্চুয়াল মেশিনের কাজ পরিচালনা করে। এই ইনস্ট্রাকশন গুলির মধ্যে সাধারণত Arithmetic Operations, Control Flow এবং Data Movement অন্তর্ভুক্ত থাকে।
কিছু সাধারণ ইনস্ট্রাকশন উদাহরণ:
add: দুইটি মান যোগ করার জন্য।add $0, $1, $2 # $1 এবং $2 কে যোগ করে $0-এ সঞ্চয়sub: দুইটি মান বিয়োগ করার জন্য।sub $0, $1, $2 # $1 থেকে $2 বিয়োগ করে ফলাফল $0-এ সঞ্চয়mul: দুইটি মান গুণ করার জন্য।mul $0, $1, $2 # $1 এবং $2 গুণ করে ফলাফল $0-এ সঞ্চয়div: দুইটি মান ভাগ করার জন্য।div $0, $1, $2 # $1 কে $2 দিয়ে ভাগ করে ফলাফল $0-এ সঞ্চয়jump: নির্দিষ্ট লেবেলে চলে যাওয়ার জন্য (Control Flow)।jump label_name # label_name এ চলে যাবেload: মেমরি থেকে ডেটা লোড করার জন্য।load $0, 1000 # মেমরি অ্যাড্রেস 1000 থেকে ডেটা $0-এ লোডstore: রেজিস্টারে ডেটা স্টোর করার জন্য।store $0, 2000 # $0 থেকে ডেটা মেমরি অ্যাড্রেস 2000 এ স্টোর
PASM এ Registers (রেজিস্টার)
রেজিস্টারগুলি হল ছোট, দ্রুতগতির স্টোরেজ সেল, যা CPU বা ভার্চুয়াল মেশিনে ডেটা সংরক্ষণ এবং প্রসেসিংয়ের জন্য ব্যবহৃত হয়। PASM এ বিভিন্ন রেজিস্টার ব্যবহার করা হয় যা ইনস্ট্রাকশনগুলোতে ডেটা ধারণ করে এবং প্রসেসিং করার জন্য ব্যবহৃত হয়।
কিছু সাধারণ রেজিস্টার উদাহরণ:
$0, $1, $2, ...: সাধারণ রেজিস্টার, যেগুলি সাধারণত গাণিতিক ও লজিক্যাল অপারেশনে ব্যবহৃত হয়।$p0, $p1, ...: প্যারামিটার রেজিস্টার, যেগুলি ফাংশন কলের জন্য ব্যবহৃত হয়।$r0, $r1, ...: রিটার্ন ভ্যালু রেজিস্টার, যেগুলি ফাংশন রিটার্নের মান সংরক্ষণ করে।
উদাহরণ:
add $0, $1, $2 # $1 এবং $2 যোগ করে ফলাফল $0-এ রাখেএখানে $0, $1, এবং $2 হল রেজিস্টার।
PASM এ Constants (ধ্রুবক)
ধ্রুবক গুলি PASM কোডে নির্দিষ্ট মান বা লিটারেল হিসাবে ব্যবহৃত হয়। এগুলি সাধারণত একবার নির্ধারিত হয়ে থাকে এবং পরে পরিবর্তন করা যায় না। PASM এ ধ্রুবকগুলি সাধারণত মেমরি অ্যাড্রেস বা ইনস্ট্রাকশন হিসেবে ব্যবহৃত হয়।
উদাহরণ:
load $0, 10 # $0-এ 10 মান লোড করবেএখানে 10 একটি ধ্রুবক মান যা সরাসরি রেজিস্টারে লোড করা হচ্ছে।
PASM এর মধ্যে Constants এর ধরণ:
- লিটারেল সংখ্যা (Literal Numbers): এই ধরণের ধ্রুবক সরাসরি ইনস্ট্রাকশন বা রেজিস্টারে ব্যবহৃত হয়। উদাহরণস্বরূপ,
10,3.14,-5ইত্যাদি। - স্ট্রিং (Strings): কিছু ক্ষেত্রে ধ্রুবক স্ট্রিং মান হিসেবে ব্যবহৃত হতে পারে, যেমন "Hello, World!" বা অন্য কোনো টেক্সট।
- অ্যাড্রেস (Memory Address): কোন নির্দিষ্ট মেমরি অ্যাড্রেস যেখানে ডেটা সংরক্ষিত থাকতে পারে।
PASM এর মধ্যে Instruction, Register, এবং Constant ব্যবহারের উদাহরণ:
# ধ্রুবক ব্যবহার
load $0, 1000 # মেমরি অ্যাড্রেস 1000 থেকে ডেটা $0 রেজিস্টারে লোড
add $1, $0, 50 # $0 এর মানের সাথে 50 যোগ করে $1-এ সঞ্চয়
# রেজিস্টার ব্যবহার
mul $2, $1, $3 # $1 এবং $3 গুণ করে ফলাফল $2-এ রাখে
# ইনস্ট্রাকশন ব্যবহার
store $2, 2000 # $2 এর মান মেমরি অ্যাড্রেস 2000 এ সংরক্ষণ করবেসারাংশ:
- ইনস্ট্রাকশন হল কমান্ড যা প্যারট ভার্চুয়াল মেশিনে কার্যকরী অপারেশন পরিচালনা করে (যেমন গাণিতিক অপারেশন, ডেটা মুভমেন্ট, লজিক্যাল অপারেশন, ইত্যাদি)।
- রেজিস্টার হল দ্রুত স্টোরেজ সেল যা ইনস্ট্রাকশনগুলোর মধ্যে ডেটা ধারণ করে এবং প্রসেসিং করে।
- ধ্রুবক (Constants) হল নির্দিষ্ট মান যা কোডে সরাসরি ব্যবহৃত হয়, এবং এগুলি সাধারণত পরিবর্তন করা যায় না।
PASM ভাষাটি প্যারট ভার্চুয়াল মেশিনের জন্য উপকারী নিচু-স্তরের প্রোগ্রামিং ভাষা, যা ডেভেলপারদের ইনস্ট্রাকশন, রেজিস্টার, এবং ধ্রুবকগুলো ব্যবহার করে কার্যকরী এবং অপটিমাইজড কোড তৈরি করতে সহায়তা করে।